// 初始化，定义一个modules对象，key为模块的路径，value是一个函数，函数里面是我们编写的源代码
var modules = {
  './commonjs/name.js': (module) => {
    module.exports = 'charlie'
  }
}

// 定义缓存对象cache
var cache = {}

// 定义加载函数require
function require(modulePath) {
  var cachedModule = cache[modulePath]
  if(cachedModule !== undefined) {
    // 如果有缓存，直接返回缓存内容
    return cachedModule.exports
  }
  // 如果没有缓存， 则定义module对象，定义exports属性
  var module = (cache[modulePath] = {
    exports: {}
  })
  // 运行模块内存的代码，在模块代码中会给module.exports对象
  modules[modulePath](module, module.exports, require)

  return module.exports
}

// 执行入口函数防止命名冲突，包装成一个立即执行函数
(() => {
  let name = require('./commonjs/name.js')
  console.log('name-----', name)
})